#include <iostream>

/*

    常量指针：指针本身不可变，但可以通过指针修改所指向的数据。
    指针常量：指针本身可变，但不能通过指针修改所指向的数据。

*/
int main(int argc, char const *argv[])
{
    int a = 10;
    int b = 100;

    using namespace std;
    const int *p1 = &a;
    cout << p1 << endl;
    p1 = &b;

    // *p1 = 4; // 错误 int 是常量，不能改int 值，可以改指向

    cout << p1 << endl;
    cout << *p1 << endl;

    int *const p2 = &a;
    cout << p2 << endl;

    *p2 = 20;
    cout << a << endl;
    cout << *p2 << endl;
    cout << p2 << endl;

    // p1 = &a; // 正确，int 是常量，不能改int 值，可以改指向

    // p2 = &a; // 错误，指针是常量，不能改，不能指向别的变量的地址

    const int *const p3 = &b;
    // p3 = &a; // 错误
    // *p3 = 11; // 错误

    return 0;
}
